home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / net / URLClassLoader.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  7.4 KB  |  277 lines

  1. package java.net;
  2.  
  3. import java.io.File;
  4. import java.io.FilePermission;
  5. import java.io.IOException;
  6. import java.nio.ByteBuffer;
  7. import java.security.AccessControlContext;
  8. import java.security.AccessController;
  9. import java.security.CodeSigner;
  10. import java.security.CodeSource;
  11. import java.security.Permission;
  12. import java.security.PermissionCollection;
  13. import java.security.PrivilegedActionException;
  14. import java.security.SecureClassLoader;
  15. import java.util.Enumeration;
  16. import java.util.jar.Attributes;
  17. import java.util.jar.Manifest;
  18. import java.util.jar.Attributes.Name;
  19. import sun.misc.Resource;
  20. import sun.misc.SharedSecrets;
  21. import sun.misc.URLClassPath;
  22. import sun.net.www.ParseUtil;
  23.  
  24. public class URLClassLoader extends SecureClassLoader {
  25.    URLClassPath ucp;
  26.    private AccessControlContext acc;
  27.  
  28.    public URLClassLoader(URL[] var1, ClassLoader var2) {
  29.       super(var2);
  30.       SecurityManager var3 = System.getSecurityManager();
  31.       if (var3 != null) {
  32.          var3.checkCreateClassLoader();
  33.       }
  34.  
  35.       this.ucp = new URLClassPath(var1);
  36.       this.acc = AccessController.getContext();
  37.    }
  38.  
  39.    public URLClassLoader(URL[] var1) {
  40.       SecurityManager var2 = System.getSecurityManager();
  41.       if (var2 != null) {
  42.          var2.checkCreateClassLoader();
  43.       }
  44.  
  45.       this.ucp = new URLClassPath(var1);
  46.       this.acc = AccessController.getContext();
  47.    }
  48.  
  49.    public URLClassLoader(URL[] var1, ClassLoader var2, URLStreamHandlerFactory var3) {
  50.       super(var2);
  51.       SecurityManager var4 = System.getSecurityManager();
  52.       if (var4 != null) {
  53.          var4.checkCreateClassLoader();
  54.       }
  55.  
  56.       this.ucp = new URLClassPath(var1, var3);
  57.       this.acc = AccessController.getContext();
  58.    }
  59.  
  60.    protected void addURL(URL var1) {
  61.       this.ucp.addURL(var1);
  62.    }
  63.  
  64.    public URL[] getURLs() {
  65.       return this.ucp.getURLs();
  66.    }
  67.  
  68.    protected Class<?> findClass(String var1) throws ClassNotFoundException {
  69.       try {
  70.          return (Class)AccessController.doPrivileged(new 1(this, var1), this.acc);
  71.       } catch (PrivilegedActionException var3) {
  72.          throw (ClassNotFoundException)var3.getException();
  73.       }
  74.    }
  75.  
  76.    private Class defineClass(String var1, Resource var2) throws IOException {
  77.       int var3 = var1.lastIndexOf(46);
  78.       URL var4 = var2.getCodeSourceURL();
  79.       if (var3 != -1) {
  80.          String var5 = var1.substring(0, var3);
  81.          Package var6 = this.getPackage(var5);
  82.          Manifest var7 = var2.getManifest();
  83.          if (var6 != null) {
  84.             if (var6.isSealed()) {
  85.                if (!var6.isSealed(var4)) {
  86.                   throw new SecurityException("sealing violation: package " + var5 + " is sealed");
  87.                }
  88.             } else if (var7 != null && this.isSealed(var5, var7)) {
  89.                throw new SecurityException("sealing violation: can't seal package " + var5 + ": already loaded");
  90.             }
  91.          } else if (var7 != null) {
  92.             this.definePackage(var5, var7, var4);
  93.          } else {
  94.             this.definePackage(var5, (String)null, (String)null, (String)null, (String)null, (String)null, (String)null, (URL)null);
  95.          }
  96.       }
  97.  
  98.       ByteBuffer var9 = var2.getByteBuffer();
  99.       if (var9 != null) {
  100.          CodeSigner[] var11 = var2.getCodeSigners();
  101.          CodeSource var13 = new CodeSource(var4, var11);
  102.          return this.defineClass(var1, var9, var13);
  103.       } else {
  104.          byte[] var10 = var2.getBytes();
  105.          CodeSigner[] var12 = var2.getCodeSigners();
  106.          CodeSource var8 = new CodeSource(var4, var12);
  107.          return this.defineClass(var1, var10, 0, var10.length, var8);
  108.       }
  109.    }
  110.  
  111.    protected Package definePackage(String var1, Manifest var2, URL var3) throws IllegalArgumentException {
  112.       String var4 = var1.replace('.', '/').concat("/");
  113.       String var5 = null;
  114.       String var6 = null;
  115.       String var7 = null;
  116.       String var8 = null;
  117.       String var9 = null;
  118.       String var10 = null;
  119.       String var11 = null;
  120.       URL var12 = null;
  121.       Attributes var13 = var2.getAttributes(var4);
  122.       if (var13 != null) {
  123.          var5 = var13.getValue(Name.SPECIFICATION_TITLE);
  124.          var6 = var13.getValue(Name.SPECIFICATION_VERSION);
  125.          var7 = var13.getValue(Name.SPECIFICATION_VENDOR);
  126.          var8 = var13.getValue(Name.IMPLEMENTATION_TITLE);
  127.          var9 = var13.getValue(Name.IMPLEMENTATION_VERSION);
  128.          var10 = var13.getValue(Name.IMPLEMENTATION_VENDOR);
  129.          var11 = var13.getValue(Name.SEALED);
  130.       }
  131.  
  132.       var13 = var2.getMainAttributes();
  133.       if (var13 != null) {
  134.          if (var5 == null) {
  135.             var5 = var13.getValue(Name.SPECIFICATION_TITLE);
  136.          }
  137.  
  138.          if (var6 == null) {
  139.             var6 = var13.getValue(Name.SPECIFICATION_VERSION);
  140.          }
  141.  
  142.          if (var7 == null) {
  143.             var7 = var13.getValue(Name.SPECIFICATION_VENDOR);
  144.          }
  145.  
  146.          if (var8 == null) {
  147.             var8 = var13.getValue(Name.IMPLEMENTATION_TITLE);
  148.          }
  149.  
  150.          if (var9 == null) {
  151.             var9 = var13.getValue(Name.IMPLEMENTATION_VERSION);
  152.          }
  153.  
  154.          if (var10 == null) {
  155.             var10 = var13.getValue(Name.IMPLEMENTATION_VENDOR);
  156.          }
  157.  
  158.          if (var11 == null) {
  159.             var11 = var13.getValue(Name.SEALED);
  160.          }
  161.       }
  162.  
  163.       if ("true".equalsIgnoreCase(var11)) {
  164.          var12 = var3;
  165.       }
  166.  
  167.       return this.definePackage(var1, var5, var6, var7, var8, var9, var10, var12);
  168.    }
  169.  
  170.    private boolean isSealed(String var1, Manifest var2) {
  171.       String var3 = var1.replace('.', '/').concat("/");
  172.       Attributes var4 = var2.getAttributes(var3);
  173.       String var5 = null;
  174.       if (var4 != null) {
  175.          var5 = var4.getValue(Name.SEALED);
  176.       }
  177.  
  178.       if (var5 == null && (var4 = var2.getMainAttributes()) != null) {
  179.          var5 = var4.getValue(Name.SEALED);
  180.       }
  181.  
  182.       return "true".equalsIgnoreCase(var5);
  183.    }
  184.  
  185.    public URL findResource(String var1) {
  186.       URL var2 = (URL)AccessController.doPrivileged(new 2(this, var1), this.acc);
  187.       return var2 != null ? this.ucp.checkURL(var2) : null;
  188.    }
  189.  
  190.    public Enumeration<URL> findResources(String var1) throws IOException {
  191.       Enumeration var2 = this.ucp.findResources(var1, true);
  192.       return new 3(this, var2);
  193.    }
  194.  
  195.    protected PermissionCollection getPermissions(CodeSource var1) {
  196.       PermissionCollection var2 = super.getPermissions(var1);
  197.       URL var3 = var1.getLocation();
  198.  
  199.       Object var4;
  200.       URLConnection var5;
  201.       try {
  202.          var5 = var3.openConnection();
  203.          var4 = var5.getPermission();
  204.       } catch (IOException var8) {
  205.          var4 = null;
  206.          var5 = null;
  207.       }
  208.  
  209.       if (var4 instanceof FilePermission) {
  210.          String var6 = ((Permission)var4).getName();
  211.          if (var6.endsWith(File.separator)) {
  212.             var6 = var6 + "-";
  213.             var4 = new FilePermission(var6, "read");
  214.          }
  215.       } else if (var4 == null && var3.getProtocol().equals("file")) {
  216.          String var11 = var3.getFile().replace('/', File.separatorChar);
  217.          var11 = ParseUtil.decode(var11);
  218.          if (var11.endsWith(File.separator)) {
  219.             var11 = var11 + "-";
  220.          }
  221.  
  222.          var4 = new FilePermission(var11, "read");
  223.       } else {
  224.          URL var10 = var3;
  225.          if (var5 instanceof JarURLConnection) {
  226.             var10 = ((JarURLConnection)var5).getJarFileURL();
  227.          }
  228.  
  229.          String var7 = var10.getHost();
  230.          if (var7 == null) {
  231.             var7 = "localhost";
  232.          }
  233.  
  234.          var4 = new SocketPermission(var7, "connect,accept");
  235.       }
  236.  
  237.       if (var4 != null) {
  238.          SecurityManager var13 = System.getSecurityManager();
  239.          if (var13 != null) {
  240.             AccessController.doPrivileged(new 4(this, var13, (Permission)var4), this.acc);
  241.          }
  242.  
  243.          var2.add((Permission)var4);
  244.       }
  245.  
  246.       return var2;
  247.    }
  248.  
  249.    public static URLClassLoader newInstance(URL[] var0, ClassLoader var1) {
  250.       AccessControlContext var2 = AccessController.getContext();
  251.       URLClassLoader var3 = (URLClassLoader)AccessController.doPrivileged(new 5(var0, var1));
  252.       var3.acc = var2;
  253.       return var3;
  254.    }
  255.  
  256.    public static URLClassLoader newInstance(URL[] var0) {
  257.       AccessControlContext var1 = AccessController.getContext();
  258.       URLClassLoader var2 = (URLClassLoader)AccessController.doPrivileged(new 6(var0));
  259.       var2.acc = var1;
  260.       return var2;
  261.    }
  262.  
  263.    // $FF: synthetic method
  264.    static Class access$000(URLClassLoader var0, String var1, Resource var2) throws IOException {
  265.       return var0.defineClass(var1, var2);
  266.    }
  267.  
  268.    // $FF: synthetic method
  269.    static AccessControlContext access$100(URLClassLoader var0) {
  270.       return var0.acc;
  271.    }
  272.  
  273.    static {
  274.       SharedSecrets.setJavaNetAccess(new 7());
  275.    }
  276. }
  277.